﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace Client
{
    class FolderAdmin
    {
        /// <summary>
        /// 재귀적으로 현재 디렉토리내의 파일경로를 집어넣음
        /// </summary>
        /// <param name="dirPath">찾으려는 디렉토리</param>
        /// <param name="filePathList">넣으려는 파일리스트</param>
        private static void RecursiveFiles(long nDate, string dirPath, List<string> filePathList)
        {
            

            // 현재 디렉토리를 가져옴
            DirectoryInfo di = new DirectoryInfo(dirPath);

            // 디렉토리 내에 파일들을 집어넣어!!
            foreach (FileInfo file in di.GetFiles())
            {
                long nFileDate = long.Parse(file.LastWriteTime.ToString("yyyyMMddHHmmss"));
                if (nFileDate > nDate)
                {
                    filePathList.Add(file.FullName);
                }
            }

            // 디렉토리 내에 디렉토리를 재귀적으로 돌림
            foreach (DirectoryInfo subDirInfo in di.GetDirectories())
            {
                RecursiveFiles(nDate, subDirInfo.FullName, filePathList);
            }
        }

        /// <summary>
        /// 커밋할 파일들을 찾아냅니다.
        /// </summary>
        /// <param name="dirPath">찾으려는 디렉토리 경로</param>
        /// <returns>커밋할 파일경로 리스트</returns>
        public static List<string> GetCommitFiles(string dirPath)
        {
            TxtReader.ReadDataFile(dirPath);
            string date = TxtReader.GetString(TxtReader.LINE.DATE);
            long nDate = long.Parse(date);

            List<string> filePathList = new List<string>();

            RecursiveFiles(nDate, dirPath, filePathList);

            return filePathList;
        }

        /*
        public static List<string> GetCommitFiles(string folderAdr)
        {
            List<string> fileNames = new List<string>();

            string[] files = Directory.GetFiles(folderAdr);
            string[] directories = Directory.GetDirectories(folderAdr);

            

            foreach (string fileName in files)
            {
                FileInfo fInfo = new FileInfo(fileName);
                DateTime dTime = fInfo.LastWriteTime;
                long nFileDate = long.Parse(dTime.ToString("yyyyMMddHHmmss"));

                // 이후에 수정된 파일
                if (nFileDate > nDate)
                {
                    fileNames.Add(fInfo.Name);
                }
            }

            foreach (string directoryName in directories)
            {
                string[] dirFileNames = Directory.GetFiles(directoryName);
                foreach (string dirFileName in dirFileNames)
                {
                    FileInfo fInfo = new FileInfo(dirFileName);
                    DateTime dTime = fInfo.LastWriteTime;
                    long nFileDate = long.Parse(dTime.ToString("yyyyMMddHHmmss"));

                    if (nFileDate > nDate)
                    {
                        fileNames.Add(fInfo.Name);
                    }
                }
            }

            return fileNames;
        }
         */

        public static void CreateFolder(string folderAdr)
        {

        }
    }
}
